package Stack_Demo;

import java.util.Stack;

public class Stack_Help {
//    辅助 栈
//    力扣 155

    private Stack<Integer> stack ;
    private Stack<Integer> minStack;
    public Stack_Help() {
         stack = new Stack<>();
         minStack = new Stack<>();
    }
    public void push(int val) {
        /*1.push的时候 普通栈一定要放元素
        * 2. 最小栈如果是空的 也要放元素  如果不为空,则与最小栈栈顶元素比较 如果小于栈顶元素 则放入*/
        stack.push(val);
        if (minStack.empty()){
            minStack.push(val);
        }else {
            int peekVal = minStack.peek();
            if (val <= peekVal){
                minStack.push(val);
            }
        }
    }
    public void pop() {
        if (!stack.empty()) { // 首先检查普通栈是否为空
            // 只有普通栈不为空时，才能从中弹出元素
            int topVal = stack.peek(); // 获取普通栈顶元素
            if (!minStack.empty() && topVal == minStack.peek()) {
                // 如果最小栈不为空，且普通栈顶元素等于最小栈栈顶元素
                // 则两个栈都需要弹出元素
                minStack.pop();
            }
            // 无论是否与最小栈栈顶元素相等，普通栈都需要弹出元素
            stack.pop();
        }
    }


    public int top() {
//      获取栈顶元素
        return stack.peek();
    }

    public int getMin() {
        if (!minStack.empty()){
            return minStack.peek();
        }else return -1;
    }
}
